package thread;

import java.util.concurrent.*;

public class ThreadPoolDemo01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //1.创建线程池（要求固定大小），这种方式创建的池不灵活，很多参数无法自己指定，简单用可以
        ExecutorService es =
                Executors.newFixedThreadPool(3); //这里的3表示最多3个线程
        System.out.println(es.getClass().getName());
        //2.通过池中的线程去执行任务
        es.execute(()->{
            System.out.println(Thread.currentThread().getName()+"execute task1");
        });
        es.execute(()->{
            System.out.println(Thread.currentThread().getName()+"execute task2");
        });
        es.execute(()->{
            System.out.println(Thread.currentThread().getName()+"execute task3");
        });
        //当需要返回值时，用此方法
        Future<Integer> submit = es.submit(()->{ //Callable
                Thread.sleep(5000);
                return Integer.valueOf("123456");
        }
        );
        System.out.println(submit.get()); //阻塞方法获取任务的执行结果。
        //关闭线程池（一般是在服务结束时，关闭池）。
        es.shutdown(); //不再接受新任务，原有任务执行结束则关闭池。
        es.shutdownNow(); //不再接受新任务，正在执行的任务有可能会被停止。
    }
}
